package com.xpec.c4.service.ioc;

import java.util.Set;

import com.xpec.c4.service.group.datalayer.IShareGroupData;

/**
 * 对象代理接口
 * 
 * @author lipeilin
 * 
 */
public interface IocProxy extends IShareGroupData {

	/**
	 * 创建代理对象
	 * 
	 * @param targetClass
	 * @param proxyTypes
	 * @return
	 */
	public <T> T createObject(Class<T> targetClass, Set<ProxyType> proxyTypes);

	/**
	 * 创建代理对象，使用指定的参数
	 * 
	 * @param <T>
	 * @param targetClass
	 *            目标类
	 * @param proxyTypes
	 *            代理类型
	 * @param argumentTypes
	 *            参数类型
	 * @param arguments
	 *            参数值
	 * @return
	 */
	public <T> T createObject(Class<T> targetClass, Set<ProxyType> proxyTypes,
			Class<?>[] argumentTypes, Object[] arguments);

	/**
	 * 是否代理类
	 * 
	 * @param targetClass
	 * @return
	 */
	public boolean isProxy(Class<?> targetClass);

	/**
	 * 是否代理对象
	 * 
	 * @param obj
	 * @return
	 */
	public boolean isProxy(Object obj);

	/**
	 * 取得真正的类
	 * 
	 * @param targetClass
	 * @return
	 */
	public Class<?> getRealClass(Class<?> targetClass);

	/**
	 * 取得代理类
	 * 
	 * @param targetClass
	 * @param proxyTypes
	 * @return
	 *
	 * @author lipeilin
	 * @2011-2-12 下午04:40:40
	 */
	public Class<?> getProxyClass(Class<?> targetClass,
			Set<ProxyType> proxyTypes);

}
